#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>

#include <semaphore.h>

#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

// 定义全局变量： 信号量
sem_t sem1;
// 停车任务
void *carstop_task(void *arg){ 
    char *name = (char *)arg;
    sem_wait(&sem1);
   
    printf("%s 入场成功\n", name);
    sleep(rand() % 6 + 5);

    printf("%s 出场成功\n", name);
    sem_post(&sem1);
    
    return NULL;
}

int main(int argc, char const *argv[])
{
    srand(time(NULL));
    
    // 初始化信号量(多值信号量)
    sem_init(&sem1, 0, 10);

    // 创建20个线程（车辆）
    char cars[20][64] = {"A","B","C"};
    pthread_t carids[20];
    for(int i=0;i<20;i++){
        
        sprintf(cars[i], "陕A8%02d6%c", rand() % 90+10, rand() % 22 + 65);
        pthread_create(&carids[i], NULL, carstop_task, cars[i]);
    }

    for(int i=0;i<20;i++){
        pthread_join(carids[i], NULL);
    }

    // 销毁信号量
    sem_destroy(&sem1);
    return 0;
}
